/* DigitCount.h
 * 
 *  Author          : Alexander J. Yee
 *  Date Created    : 01/13/2018
 *  Last Modified   : 01/13/2018
 * 
 */

#pragma once
#ifndef ydv_DigitViewer_DigitCount_H
#define ydv_DigitViewer_DigitCount_H
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Dependencies
#include <string>
#include "PublicLibs/Types.h"
namespace DigitViewer2{
    using namespace ymp;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
struct DigitCounts{
public:
    DigitCounts(char radix);

    bool operator==(const DigitCounts& x) const;
    bool operator!=(const DigitCounts& x) const;
    void operator+=(const DigitCounts& x);

    std::string to_string() const;
    uiL_t operator[](upL_t index) const{ return m_counts[index]; }
    uiL_t& operator[](upL_t index){ return m_counts[index]; }

public:
    void accumulate(const char* raw_digits, upL_t digits);

private:
    char m_radix;
    uiL_t m_counts[16];
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
}
#endif
